﻿#pragma once
#ifndef ServerConfig_hpp
#define ServerConfig_hpp

#include<stdint.h>
#include<mutex>
#include<string>
#include<vector>
#include<atomic>

#include"../Framework/AppDefine.hpp"

namespace MMF 
{

    //ws控制服务器配置信息
    struct MMFServerWsCfg
    {
        std::string mRouter;                    ///< Ws服务的url路由
        uint16_t mPort;                         ///< Ws服务的端口
    };

    //全局服务器配置
    struct MMFServerCfg
    {
        std::string mServerIp;                  ///< 服务器ip地址
        uint16_t mCmdServerPort;                ///< 命令服务端口
        uint16_t mUnitServerPort;               ///< 单元服务端口
        uint16_t mStreamBroadcastPort;          ///< 广播服务起始端口
        uint16_t mStreamBroadcastCount;         ///< 广播服务数量
        MMFServerWsCfg  mWsCtrlCfg;             ///< WsCtrl服务的配置
    };

    class ServerConfig
    {

        //单例相关数据
        static std::once_flag sFlag;
        static ServerConfig* sInstance;

        MMFServerCfg mGlobalCfg;
        std::vector<MMFServerCpt> mServerCpt;   ///< 服务器组件

        std::atomic<bool> mIsLoad = false;

    public:

        //获取实例
        static ServerConfig& Instance();

        bool Start();

        const std::vector<MMFServerCpt>& ServerApp();
        const MMFServerCfg& GlobalCfg();

    private:

        bool ParseCfg();
    };

}

#endif